﻿using OfficeOpenXml;

namespace ClassLibrary_fqy_NET.ExcelOperate
{
    /// <summary>
    /// EPPlus库帮助类
    /// 支持读写 Excel 2007/2010/2013/2016/2019 文件格式（.xlsx）
    /// V8.0.0 版本开始,仅支持非商业用途
    /// </summary>
    internal class EPPlusHelper
    {
        /// <summary>
        /// 获取Excel表格中指定列的所有值
        /// </summary>
        /// <param name="path">表格存储绝对路径</param>
        /// <param name="sheetName">sheet名称</param>
        /// <param name="titlenable">是否包含标题行  默认:false</param>
        /// <param name="colNum">指定列索引(1~N) 默认:第一列</param>
        /// <returns></returns>
        public static string[]? GetColumnValues(string path, string sheetName, bool titlenable = false, int colNum = 1)
        {
            //判断文件是否存在
            if (!File.Exists(path))
            {
                return null;
            }
            //使用前需配置非商业用途许可证
            ExcelPackage.License.SetNonCommercialPersonal("<fqy123>");
            using (var package = new ExcelPackage(path))
            {
                //获取指定工作表
                var worksheet = package.Workbook.Worksheets[sheetName];
                if (worksheet == null)
                {
                    return null;
                }

                var rowsNum = worksheet.Dimension.Rows; //获取有数据的行数
                var columnNum = worksheet.Dimension.Columns; //获取有数据的列数
                if (rowsNum > 0 && columnNum >= colNum)
                {
                    if (titlenable) //包含标题行
                    {
                        var columnValues = new string[rowsNum];
                        for (int i = 0; i < rowsNum; i++)
                        {
                            var cellValue = worksheet.Cells[i + 1, colNum].Value;
                            columnValues[i] = cellValue?.ToString() ?? string.Empty; // 防止 null 引用
                        }
                        return columnValues;
                    }
                    else //不包含标题行
                    {
                        var columnValues = new string[rowsNum - 1];
                        for (int i = 0; i < rowsNum - 1; i++)
                        {
                            var cellValue = worksheet.Cells[i + 2, colNum].Value;
                            columnValues[i] = cellValue?.ToString() ?? string.Empty; // 防止 null 引用
                        }
                        return columnValues;
                    }
                }
            }

            return null;
        }


    }
}
